/*
 * @lc app=leetcode.cn id=136 lang=typescript
 *
 * [136] 只出现一次的数字
 */

// @lc code=start

// hash 表法
// function singleNumber(nums: number[]): number {
//     return [
//         ...nums
//             .reduce((col, cur) => {
//                 if (col.has(cur)) {
//                     col.delete(cur);
//                 } else {
//                     col.add(cur);
//                 }

//                 return col;
//             }, new Set<number>())
//             .values(),
//     ][0];
// }

// TODO 异或法
// 异或法
// 0 ^ any = any
// 2^2^3 = 3
function singleNumber(nums: number[]): number {
    if (nums.length === 1) return nums[0];

    for (let index = 1; index < nums.length; index++) {
        nums[0] ^= nums[index];
    }
    return nums[0];
}
// @lc code=end
